/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * ColorDialogTableProperties.java
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 21/02/2011, 11:23:38 AM
 */
package com.ufps.cuatro.util.editor;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;

import com.ufps.cuatro.modelo.representacion.Propiedad;

/**
 * <i><b>ColorDialogTableProperties:</b></i><p>Esta clase esta basada en el ejemplo de sun
 * del mismo nombre y es la encargada de devolver un color seleccionado por el usuario
 * el cual será aplicado al control representado por el Componente por medio de la
 * propiedad actual.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 21/02/2011
 * 
 * @see ActionListener
 * @see JButton
 */
public class ColorDialogTableProperties extends JButton implements ActionListener {
    private static final long serialVersionUID = -8870863674286599163L;
    
    private Color currentColor;    
    private Color backColor;    
    private JColorChooser colorChooser;
    private JDialog dialog;
    /**
     * Indica la Accción de ejecución.
     */
    protected static final String EDIT = "edit";
    private Propiedad objPropiedad;
    

    /**
     * Constructor por Defecto.
     * @param objPropiedad Propiedad que será administrada.
     */
    public ColorDialogTableProperties(Propiedad objPropiedad) {
       try{
           //Set up the editor (from the table's point of view),
        //which is a button.
        //This button brings up the color chooser dialog,
        //which is the editor from the user's point of view.
        this.objPropiedad = objPropiedad;        
        
        //Obtener el Color Anterior
        try{
            String strColor = String.valueOf(this.objPropiedad.getValue());
            int intColor = Integer.parseInt(strColor);
            backColor = new Color(intColor);            
        }catch(java.lang.NumberFormatException ex){            
            backColor = Color.BLACK;
        }             
        
        currentColor = JColorChooser.showDialog(ColorDialogTableProperties.this,
                "Seleccione un Color", backColor);
        
        if(currentColor != null){
            this.setBackground(currentColor);
            String strColor = String.valueOf(currentColor.getRGB());
            this.objPropiedad.setValue(strColor);
        }
        
//        this.setActionCommand(EDIT);
//        this.addActionListener(ColorDialogTableProperties.this);
//        this.setBorderPainted(true);
//        this.setOpaque(true);        
//
//        //Set up the dialog that the button brings up.
//        colorChooser = new JColorChooser();        
//        dialog = JColorChooser.createDialog(ColorDialogTableProperties.this,
//                                        "Seleccione un Color",
//                                        true,  //modal
//                                        colorChooser,
//                                        ColorDialogTableProperties.this,  //OK button handler
//                                        null); //no CANCEL button handler       
//        
//        if(!objPropiedad.getObjParametrosSet().get(0).getStrValue().isEmpty()){            
//            try{
//                String strColor = String.valueOf(this.objPropiedad.getStrValue());
//                int intColor = Integer.parseInt(strColor);
//                currentColor = new Color(intColor);
//                this.setBackground(currentColor);
//                this.objPropiedad.getObjParametrosSet().get(0).setStrValue(String.valueOf(currentColor.getRGB()));
//            }catch(java.lang.NumberFormatException ex){
//                this.objPropiedad.getObjParametrosSet().get(0).setStrValue(String.valueOf(backColor.getRGB()));
//            }
//        }
    }catch(java.lang.NullPointerException ex){}
       
    }

    /**
     * Handles events from the editor button and from
     * the dialog's OK button.
     * @param e @DescripcionParametro
     */
    public void actionPerformed(ActionEvent e) {
        try{
            if (EDIT.equals(e.getActionCommand())) {
                //The user has clicked the cell, so
                //bring up the dialog.
                this.setBackground(currentColor);
                colorChooser.setColor(currentColor);
                dialog.setVisible(true);           

            } else if(e.getActionCommand().equalsIgnoreCase("OK")) { //User pressed dialog's "OK" button.
                currentColor = colorChooser.getColor();
                this.setBackground(currentColor);
                this.objPropiedad.getObjParametrosSet().get(0).setStrValue(String.valueOf(currentColor.getRGB()));
            } else if(e.getActionCommand().equalsIgnoreCase("Cancel")) { //User pressed dialog's "Cancel" button.            
                try{
                    String strColor = String.valueOf(this.objPropiedad.getValue());
                    int intColor = Integer.parseInt(strColor);
                    currentColor = new Color(intColor);
                    this.setBackground(currentColor);
                    this.objPropiedad.getObjParametrosSet().get(0).setStrValue(String.valueOf(currentColor.getRGB()));
                }catch(java.lang.NumberFormatException ex){
                    this.objPropiedad.getObjParametrosSet().get(0).setStrValue(String.valueOf(backColor.getRGB()));
                }
            }
        }catch(java.lang.NullPointerException ex){}
        
    }   
    
}

